<?php
class Model_kota extends CI_Model {

	/*
	 * 1. var $table digunakan untuk menginisialisasi nama table dari model yang bersangkutan
	 * 2. variable ini ditaruh di global agar bisa di akses oleh semua function
	 * 3. Hal ini juga dimaksudkan apabila terjadi perubahan nama table, tinggal mengganti 1 saja
	 */
	var $table = "kota";
	
    function Model_User()
    {
        // Call the Model constructor
        parent::__construct();
    }
	
	/*
	 * function get_by($id);
	 * function ini digunakan untuk mengambil singgle row saja.
	 * digunakan untuk mengambil data ketika edit data.
	 */
	function get_by($id){
		$this->load->database();
						
			$sql = "SELECT * FROM {$this->table} WHERE id='$id';";
			$query = $this->db->query($sql);
		
		$this->db->close();
		
		return $query;
	}
	
	/*
	 * function get_all();
	 * function ini digunakan untuk mengambil banyak record.
	 * digunakan ketika ingin melihat data dari table tsb.
	 */
	function get_all($page=0,$limit=20, $q='',$published='',$uid=''){
		$this->load->database();
		$filter='';
		$page = $page*$limit;
		if($q != ''){
			$filter = " WHERE (";
			$fields = $this->db->list_fields("{$this->table}");
			foreach ($fields as $field){
			   $filter .= " {$this->table}.$field LIKE '%$q%' OR" ;
			}
			$filter = rtrim($filter,'OR').")";
		}
		
		if($published != ''){
			if($uid!='')
				$filter .= " ".(strpos($filter,"WHERE") === false?"WHERE":"AND")." {$this->table}.published='$published'";
		}
		
		if($uid != ''){
			if($uid!='')
				$filter .= " ".(strpos($filter,"WHERE") === false?"WHERE":"AND")." {$this->table}.user_id='$uid'";
		}
		
		//mengambil data dengan ada limitnya
		$sql = "SELECT {$this->table}.*, users.nama as nama_user FROM {$this->table} LEFT JOIN users ON user_id=users.id  $filter ORDER BY kota.nama ASC LIMIT $page,$limit;";
		$query['data'] = $this->db->query($sql);
		
		//mengambil count dari semua data. Digunakan untuk pengaturan pagingnya
		$sql = "SELECT {$this->table}.* FROM {$this->table} $filter";
		$query['count'] = $this->db->query($sql);
		$this->db->close();
		
		return $query;
	}
	
	function get_list_city(){
		$this->load->database();
			$sql = "SELECT id, nama, lat,lng, permalink, total_lokasi, IFNULL(sum(total_kajian),0) total_kajian FROM 
				(SELECT kota.id, kota.nama, kota.permalink, kota.lat, kota.lng, count(lokasi.id) total_lokasi FROM kota LEFT JOIN lokasi ON kota_id = kota.id WHERE kota.published='yes' GROUP BY kota.id) kota 
					LEFT JOIN 
				(SELECT kota_id, count(kajian.id) total_kajian FROM lokasi LEFT JOIN  ((SELECT * FROM kajian WHERE jns_kajian_id=1 AND published='yes') UNION (SELECT * FROM kajian WHERE jns_kajian_id<>1 AND published='yes' AND DATE(tanggal_mulai) >= DATE(NOW()) AND DATE(tanggal_mulai) <= DATE_ADD(NOW(),INTERVAL 30 DAY))) kajian ON lokasi.id=lokasi_id GROUP BY lokasi.id) lokasi 
					ON kota_id=kota.id 
					GROUP BY kota.id ORDER BY kota.nama;";
			
			$query = $this->db->query($sql);
		$this->db->close();
		
		return $query;
	}
    
	/*
	 * function add();
	 * digunakan untuk menambahkan data
	 * parameter $data adalah array dimana key dari array tsb adalah nama field 
	   dan value dari arrat tsb adalah record yang akan diinsertakan
	 */
	function add($data){
		$this->load->database();		
		$this->db->trans_start();
			$this->db->insert("{$this->table}",$data);
		$this->db->trans_complete();
		
		$return = $this->db->trans_status();
		
		$this->db->close();
		return $return;
	}
	
	/*
	 * function edit();
	 * digunakan untuk mengedit data
	 * parameter $data adalah array dimana key dari array tsb adalah nama field 
	   dan value dari arrat tsb adalah record yang akan diinsertakan
	 * parameter $id adalah id dari data yang akan diedit
	 */
	 
	function edit($id,$data){
		$this->load->database();
			$this->db->where('id',$id);
			$this->db->update("{$this->table}",$data);
		$this->db->close();
	}
	
	/*
	 * function delete();
	 * digunakan untuk menghapus data
	 * parameter $id adalah id dari data tersebut
	 */
	function delete($id){
		$this->load->database();
		
		$this->db->trans_start();
			$this->db->query("DELETE FROM {$this->table} WHERE id='$id'");
		$this->db->trans_complete();
		
		$return = $this->db->trans_status();
		
		$this->db->close();
		return $return;
	}
}
?>